package com.xunk.system.service;

import com.xunk.common.core.web.domain.AjaxResult;
import com.xunk.system.api.domain.SysHome;
import com.xunk.system.api.domain.SysUser;
import com.xunk.system.domain.SysHomeResponse;
import com.xunk.system.vo.AllotMasterVO;
import com.xunk.system.vo.MasterBindHomeRequestVO;
import com.xunk.system.vo.UserHomeInfoResponseVO;

import java.util.List;

/**
 * 家庭房屋信息Service接口
 *
 * @author ruoyi
 * @date 2021-03-10
 */
public interface ISysHomeService {
    /**
     * 查询家庭房屋信息
     *
     * @param homeId 家庭房屋信息ID
     * @return 家庭房屋信息
     */
    public SysHome selectSysHomeById(Long homeId);

    public List<SysHome> selectSysHomeByCode(String inviteCode);

    /**
     * 查询家庭房屋信息列表
     *
     * @param sysHome 家庭房屋信息
     * @return 家庭房屋信息集合
     */
    public List<SysHomeResponse> selectSysHomeList(SysHome sysHome);

    /**
     * 新增家庭房屋信息
     *
     * @param sysHome 家庭房屋信息
     * @return 结果
     */
    public int insertSysHome(SysHome sysHome);

    /**
     * 修改家庭房屋信息
     *
     * @param sysHome 家庭房屋信息
     * @return 结果
     */
    public int updateSysHome(SysHome sysHome);

    /**
     * 批量删除家庭房屋信息
     *
     * @param homeIds 需要删除的家庭房屋信息ID
     * @return 结果
     */
    public int deleteSysHomeByIds(Long[] homeIds);

    /**
     * 删除家庭房屋信息信息
     *
     * @param homeId 家庭房屋信息ID
     * @return 结果
     */
    public int deleteSysHomeById(Long homeId);

    List<SysUser> selectHomeMemberByHomeId(Long homeId);

    /**
     *  从家庭中删除用户
     * @param userId    用户id
     * @param homeId    家庭id
     */
    void removeUserFromHome(Long userId, Long homeId);

    void masterBindHome(MasterBindHomeRequestVO requestVO);

    /**
     *  普通用户通过二维码加入家庭
     * @param qrCode    家庭id
     */
    void userBindHome(String qrCode);

    /**
     *  "禅让"房主给其他人
     * @param masterVO 请求参数
     * @param authHeader  header
     */
    void allotMasterToUser(AllotMasterVO masterVO, String authHeader);

    UserHomeInfoResponseVO findHomeByUserId(Long userId);

    void quitHome(Long homeId);

    /**
     *  查询指定房屋信息和对应的房主信息
     * @param homeId    房屋id
     */
    AjaxResult selectMasterAndHomeInfo(String homeId);
}
